const JWT = require('jsonwebtoken');

module.exports = (options, app) => {
    return async function (ctx, next) {
        // 拿到传会数据的header 中的token值
        const token = ctx.request.header.authorization;
        const method = ctx.method.toLowerCase();
        // 当前请求时get请求，执行接下来的中间件
        if (method === 'get') {
            return await next();
            // 当前token值不存在的时候
        } else if (!token) {
            if (ctx.path === '/user/register' || ctx.path === '/user/login' || ctx.path === '/user/checkCode') {
                return await next();
            } else {
                ctx.body = {
                    status: 401,
                    message: '未登录， 请先登录',
                    result: null
                };
                ctx.status = 401;
                return;
            }
        } else { // 当前token值存在
            let decode;
            try {
                // 验证当前token
                if (!ctx.count) {
                    ctx.count = 1;
                } else {
                    ctx.count++;
                }
                console.log(ctx.count, token, options)
                
                decode = JWT.verify(token, options.secret);
                ctx.user = decode;
                return await next();
            } catch (e) {
                ctx.body = {
                    status: 401,
                    message: '登录信息已过期，请重新登录',
                    result: null
                };
                ctx.status = 401;
                return;
            }
        }
    };
};